﻿//给定一个长度为n的数组arr，返回arr的最长无重复元素子数组的长度，无重复指的是所有数字都不相同。
//子数组是连续的，比如[1, 3, 5, 7, 9]的子数组有[1, 3]，[3, 5, 7]等等，但是[1, 3, 7]不是子数组

//示例1
//输入：[2, 3, 4, 5]
//返回值：4
//说明：[2, 3, 4, 5]是最长子数组
//
//示例2
//输入：[2, 2, 3, 4, 3]
//返回值：3
//说明：[2, 3, 4]是最长子数组
//
//示例3
//输入：[9]
//返回值：1

class Solution {
    int hash[100010] = { 0 };
public:
    int maxLength(vector<int>& arr) {
        int left = 0, right = 0, n = arr.size();
        int ret = 0;
        while (right < n) {
            hash[arr[right]]++; // 进窗⼝
            while (hash[arr[right]] > 1) { // 判断
                hash[arr[left]]--; // 出窗⼝
                left++;
            }
            ret = max(ret, right - left + 1); // 更新结果
            right++;
        }
        return ret;
    }
};
